from flask import Flask,session,g
import config
from exts import db,mail
# from blueprints.qa import bp as qa_bp
from apps import qa_bp
from apps import user_bp
from flask_migrate import Migrate
from models import UserModel
app = Flask(__name__)

app.config.from_object(config)#加载配置文件
db.init_app(app)
mail.init_app(app)

migrate = Migrate(app, db)

app.register_blueprint(qa_bp)
app.register_blueprint(user_bp)

#请求发送到视图函数之前先执行该函数，判断用户是否存在，类似于django的中间件（全局）
@app.before_request
def before_request():
    user_id = session.get("user_id")
    if user_id:
        try:
            user = UserModel.query.get(user_id)
            # 给g绑定一个叫做user的变量，他的值是user这个变量
            # setattr(g,"user",user)
            g.user = user
        except:
            g.user = None

# 请求来了 -> before_request -> 视图函数 -> 视图函数中返回模板 -> context_processor

#函数视图返回的模板都会执行该函数，判断用户是否存在（全局）
@app.context_processor
def context_processor():
    if hasattr(g,"user"):#反射，判断g中是否存在user属性
        return {"user": g.user}
    else:
        return {}


if __name__ == '__main__':
    app.run()
